package dfbz.HashSet;
/*
* Set接口特点：
*  1.不能存储重复元素
*  2.没有索引
* HashSet
*  1.无序的集合
*  2.不能存储重复元素
*  3.没有索引
*  4.底层是由哈希表实现的
*
*  HashSet底层数据是哈希表
*   int hashcode（）返回的对象是哈希值
*   jdk 1.8之前。数组+链表
*   jdk1.8之后 数组+链表+红黑树
*
*   哈希表的存储流程
*    new HashSet时底层生成一个长度为16的数组。
*    第一次存储数据时，（存哈希值）不需要判断
*    第二次存储数据时，先比较哈希值是否一样。
*    相同:调用equals方法比较内容：
*          相同：元素重复，不存
*          不相同：元素不重复，存。
*    哈希值不同：直接存储
*
*    总结:
*       添加自定义对象时，需要重写 hashcode，equal方法
*
* */

import java.util.HashSet;

public class Test01 {
    public static void main(String[] args) {
        HashSet<Student> objects = new HashSet<>();
        objects.add(new Student("Lucy",20,88.8));
        objects.add(new Student("Mike",18,88.1));
        objects.add(new Student("Rose",16,88.2));
        objects.add(new Student("Rose",16,88.2)); //哈希值一样，内容一样 不存
        System.out.println(objects.toString());
        System.out.println(objects.hashCode());
    }
}
